#!/usr/bin/env node

import { promises as fs } from 'fs';
import { dirname, join } from 'path';
import { fileURLToPath } from 'url';
import { homedir, platform } from 'os';

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

// 获取不同操作系统下的Cursor配置路径
function getCursorConfigPath() {
  const home = homedir();
  
  switch (platform()) {
    case 'win32':
      return join(home, 'AppData', 'Roaming', 'Cursor', 'User', 'globalStorage', 'cursor.mcp', 'claude_desktop_config.json');
    case 'darwin':
      return join(home, 'Library', 'Application Support', 'Cursor', 'User', 'globalStorage', 'cursor.mcp', 'claude_desktop_config.json');
    case 'linux':
      return join(home, '.config', 'Cursor', 'User', 'globalStorage', 'cursor.mcp', 'claude_desktop_config.json');
    default:
      throw new Error(`Unsupported platform: ${platform()}`);
  }
}

// 获取MCP服务器的执行路径
function getMcpServerPath() {
  // 如果是全局安装，使用全局路径
  if (process.env.npm_config_global === 'true' || process.argv[1].includes('global')) {
    return 'mcp-time-server';
  }
  
  // 否则使用绝对路径
  const packageRoot = join(__dirname, '..');
  return join(packageRoot, 'build', 'index.js');
}

// 创建MCP配置
function createMcpConfig(existingConfig = {}) {
  const mcpServers = existingConfig.mcpServers || {};
  
  // 添加时间服务器配置
  mcpServers['time-server'] = {
    command: 'node',
    args: [getMcpServerPath()],
    env: {}
  };
  
  return {
    ...existingConfig,
    mcpServers
  };
}

// 备份现有配置
async function backupConfig(configPath) {
  try {
    const backupPath = `${configPath}.backup.${Date.now()}`;
    await fs.copyFile(configPath, backupPath);
    console.log(`✅ 已备份现有配置到: ${backupPath}`);
    return backupPath;
  } catch (error) {
    if (error.code !== 'ENOENT') {
      throw error;
    }
    console.log('ℹ️  未找到现有配置文件，将创建新配置');
    return null;
  }
}

// 确保目录存在
async function ensureDir(dirPath) {
  try {
    await fs.mkdir(dirPath, { recursive: true });
  } catch (error) {
    if (error.code !== 'EEXIST') {
      throw error;
    }
  }
}

// 主要配置函数
async function setupMcpConfig() {
  try {
    console.log('🚀 开始配置MCP时间服务器...\n');
    
    // 获取配置路径
    const configPath = getCursorConfigPath();
    console.log(`📍 配置文件路径: ${configPath}`);
    
    // 确保配置目录存在
    await ensureDir(dirname(configPath));
    
    // 备份现有配置
    await backupConfig(configPath);
    
    // 读取现有配置
    let existingConfig = {};
    try {
      const configContent = await fs.readFile(configPath, 'utf8');
      existingConfig = JSON.parse(configContent);
      console.log('📖 已读取现有配置');
    } catch (error) {
      if (error.code !== 'ENOENT') {
        console.warn('⚠️  读取现有配置失败，将创建新配置');
      }
    }
    
    // 创建新配置
    const newConfig = createMcpConfig(existingConfig);
    
    // 写入配置文件
    await fs.writeFile(configPath, JSON.stringify(newConfig, null, 2), 'utf8');
    
    console.log('\n✅ MCP时间服务器配置完成！');
    console.log('\n📋 配置详情:');
    console.log(`   服务器名称: time-server`);
    console.log(`   执行路径: ${getMcpServerPath()}`);
    console.log(`   配置文件: ${configPath}`);
    
    console.log('\n🔄 请重启Cursor IDE使配置生效');
    console.log('\n📖 可用工具:');
    console.log('   • mcp_TimeServer_get_current_time - 获取当前时间');
    console.log('   • mcp_TimeServer_format_time - 格式化时间戳');
    console.log('   • mcp_TimeServer_calculate_time_difference - 计算时间差');
    console.log('   • mcp_TimeServer_update_file_timestamp - 更新文件时间戳');
    
    console.log('\n🎉 安装完成！享受你的MCP时间服务器吧！');
    
  } catch (error) {
    console.error('\n❌ 配置失败:', error.message);
    console.error('\n🔧 故障排查建议:');
    console.error('   1. 确保Cursor IDE已安装');
    console.error('   2. 检查文件权限');
    console.error('   3. 尝试以管理员权限运行');
    console.error('   4. 手动创建配置目录');
    
    process.exit(1);
  }
}

// 显示帮助信息
function showHelp() {
  console.log('MCP时间服务器安装配置工具\n');
  console.log('用法:');
  console.log('  npm run setup         自动配置Cursor MCP连接');
  console.log('  mcp-time-server setup  (全局安装后)');
  console.log('\n选项:');
  console.log('  --help                 显示此帮助信息');
  console.log('  --version              显示版本信息');
  console.log('\n更多信息请访问: https://github.com/your-username/mcp-time-server');
}

// 显示版本信息
async function showVersion() {
  try {
    const packageJsonPath = join(__dirname, '..', 'package.json');
    const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf8'));
    console.log(`MCP时间服务器 v${packageJson.version}`);
  } catch {
    console.log('MCP时间服务器 v1.0.0');
  }
}

// 命令行参数处理
const args = process.argv.slice(2);

if (args.includes('--help') || args.includes('-h')) {
  showHelp();
} else if (args.includes('--version') || args.includes('-v')) {
  showVersion();
} else {
  setupMcpConfig();
} 